import axios from 'axios';
import { apiConfig } from '../config';

// 创建axios实例
const api = axios.create({
  baseURL: apiConfig.baseURL,
  timeout: apiConfig.timeout,
  withCredentials: apiConfig.withCredentials,
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json',
  }
});

// 请求拦截器
api.interceptors.request.use(
  config => {
    // 判断当前页面是否是登录页面
    const isLoginPage = window.location.pathname === '/login';
    
    // 从localStorage获取token
    const user = JSON.parse(localStorage.getItem('user') || '{}');
    
    if (user && user.token) {
      config.headers['Authorization'] = `Bearer ${user.token}`;
    } else if (!isLoginPage) {
      // 如果不是登录页面且没有token，才拒绝请求
      console.log('非登录页面且未登录，拒绝API请求');
      return Promise.reject(new Error('未登录，请先登录'));
    }
    
    // 解决CORS问题的额外处理
    config.headers['X-Requested-With'] = 'XMLHttpRequest';
    
    // 开发环境下使用代理
    if (process.env.NODE_ENV === 'development') {
      // 移除baseURL，使用相对路径，让代理处理
      config.baseURL = '';
      console.log('开发环境，使用相对路径请求:', config.url);
    }
    
    return config;
  },
  error => {
    console.error('请求错误:', error);
    return Promise.reject(error);
  }
);

// 响应拦截器
api.interceptors.response.use(
  response => {
    // 直接返回响应数据
    return response;
  },
  error => {
    if (error.response) {
      // 服务器返回了错误状态码
      const { status } = error.response;
      if (status === 401) {
        // 未授权，清除token并跳转到登录页
        localStorage.removeItem('user');
        window.location.href = '/login';
      }
    } else if (error.request) {
      // 请求已发出，但没有收到响应
      console.error('网络错误，服务器未响应');
    } else {
      // 设置请求时发生错误
      console.error('请求配置错误:', error.message);
    }
    return Promise.reject(error);
  }
);

export default api;
